
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>我在阿里学到的10条Java编码铁律 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>我在阿里学到的10条Java编码铁律 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">规范</div>
          <div class="card-question">在Java编程中，一个好的变量或方法命名应遵循哪三个核心要素？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">规范</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 见名知意：名称应清晰表达其用途，例如 `calculateOrderTotal` 优于 `calc`。 2. 杜绝缩写：应使用完整的单词，例如 `customerAddress` 优于 `custAddr`。 3. 统一术语：在整个项目中对同一概念使用统一的命名，例如在 `discountRate` 和 `rebateRatio` 中二选一并坚持使用。</div>
          </div>
          <div class="card-source">来源: 一、你的变量名暴露了编程年限</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">原则</div>
          <div class="card-question">文档中提到的“类设计黄金法则”包含了哪些内容？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">原则</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 单一职责原则：一个类应该只负责一件事情。 2. 方法长度适中：方法长度不应超过IDE的一个屏幕高度。 3. 优先使用设计模式：用设计模式来取代复杂的条件嵌套逻辑。</div>
          </div>
          <div class="card-source">来源: 二、别让类膨胀成代码肿瘤</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">为什么在生产代码中直接使用 `e.printStackTrace()` 是一个危险的实践？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">因为它仅仅将堆栈跟踪信息打印到标准错误流，可能导致日志文件瞬间暴增。更严重的是，它掩盖了真正的错误处理逻辑，可能导致业务状态不一致，例如文中提到的前端显示支付失败，但后端实际已经扣款的灾难性后果。</div>
          </div>
          <div class="card-source">来源: 三、别用printStackTrace糊弄事</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">原则</div>
          <div class="card-question">文档中倡导的“异常处理三原则”具体指什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">原则</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 永远不要吞掉异常。 2. 使用精确的异常类型进行捕获，例如 `catch (PaymentTimeoutException e)` 而不是笼统的 `catch (Exception e)`。 3. 日志记录中必须包含上下文信息，如订单号，以便于问题排查。</div>
          </div>
          <div class="card-source">来源: 三、别用printStackTrace糊弄事</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理念</div>
          <div class="card-question">“好代码自己会说话”这一理念的核心是什么？它对编写注释有何指导意义？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">核心是代码本身应该通过清晰的命名、简洁的结构和逻辑来清晰地表达其意图，使其易于理解，从而减少对注释的依赖。这指导我们应避免编写解释“代码做了什么”的冗余注释，而应专注于通过JavaDoc或在必要时为复杂算法添加注释来解释“为什么这么做”。</div>
          </div>
          <div class="card-source">来源: 四、好代码自己会说话</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">规范</div>
          <div class="card-question">对于不同类型的代码，文档建议的单元测试覆盖率目标分别是多少？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">规范</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档建议的覆盖率目标为：核心业务逻辑应达到100%，工具类应达到90%以上，而对于第三方集成部分，则应采用Mock测试的方式进行。</div>
          </div>
          <div class="card-source">来源: 五、你的代码真的能跑吗？</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">文档中的大型 `OrderService` 类是如何通过“领域拆分”进行重构的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">通过“领域拆分”，将一个庞大的类按照其负责的不同业务领域进行拆解。例如，`OrderService` 被拆分为负责订单操作的 `OrderOperator` 接口、负责优惠券应用的 `CouponApplicator` 接口和负责库存更新的 `InventoryUpdater` 接口，这遵循了单一职责原则。</div>
          </div>
          <div class="card-source">来源: 二、别让类膨胀成代码肿瘤</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">工具</div>
          <div class="card-question">为了实现自动化代码审查，文档推荐在IDE中集成哪三个关键插件？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">工具</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档推荐集成三个插件来辅助代码审查：1. Checkstyle (用于代码规范检查)；2. SonarLint (用于代码异味检测)；3. SpotBugs (用于潜在BUG扫描)。</div>
          </div>
          <div class="card-source">来源: 六、别用肉眼Review代码</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">在进行单元测试时，对于第三方服务的集成应该如何处理？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档建议对第三方集成进行Mock测试。即使用模拟对象（Mock）来替代真实的第三方服务依赖，从而将被测试的单元与外部依赖隔离开来，确保测试的稳定性和执行速度。</div>
          </div>
          <div class="card-source">来源: 五、你的代码真的能跑吗？</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
